#===istalismanplugin===
# -*- coding: utf-8 -*-

# $Revision: 54 $
# $Author: rchiganov@gmail.com $
# $Date: 2013-08-05 07:16:38 +0000 (Mon, 05 Aug 2013) $

#---------------------------------------------------------------------------------------------------

COMMOFF_TABU = [ u'логин', u'логаут', u'включить', u'отключить', u'доступ', u'свал', u'комлист', u'хелп', u'помощь' ]

#---------------------------------------------------------------------------------------------------

def commoff_on ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) == 0:
		reply(ptype, psource, u'нужно указать команды для включения')
		return

	if psource[1] not in COMMOFF.keys():
		commoff_load(psource[1])

	if len(COMMOFF[psource[1]]) == 0:
		reply(ptype, psource, u'включать то нечего *PARDON*')
		return

	lanswer = u''
	lliston, llistare, llistnot, llisttaby = [], [], [], []

	lcommands  = COMMANDS.keys()
	lcommands += MACROS.gmacrolist.keys()
	if MACROS.macrolist.has_key(psource[1]):
		lcommands += MACROS.macrolist[psource[1]].keys()

	for lcommand in lparam:
		if lcommand in COMMOFF_TABU:
			llisttaby.append(lcommand)

		elif lcommand in lcommands and lcommand not in COMMOFF_TABU:
			if lcommand in COMMOFF[psource[1]]:
				lliston.append(lcommand)
				COMMOFF[psource[1]].pop(COMMOFF[psource[1]].index(lcommand))
			else:
				llistare.append(lcommand)

		else:
			llistnot.append(lcommand)

	if len(lliston) > 0:
		lanswer += u'\nДля этой конфы были включены следующие команды:\n' + u', '.join(sorted(lliston))
	if len(llistare) > 0:
		lanswer += u'\nСледующие команды не были включены, поскольку они и не были отключены:\n' + u', '.join(sorted(llistare))
	if len(llistnot) > 0:
		lanswer += u'\nПеречисленные ниже команды вообще не команды:\n' + u', '.join(sorted(llistnot))
	if len(llistnot) > 0:
		lanswer += u'\nСледующие команды не отключаются вообще:\n' + u', '.join(sorted(llisttaby))

	GCHCFGS[psource[1]]['commoff'] = COMMOFF[psource[1]]
	DBPATH = 'dynamic/' + psource[1] + '/config.cfg'
	vika_check_file(DBPATH, u'{}' )
	write_file(DBPATH, str(GCHCFGS[psource[1]]))

	reply(ptype, psource, lanswer)

#---------------------------------------------------------------------------------------------------

def commoff_off ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) == 0:
		reply(ptype, psource, u'нужно указать команды для отключения')
		return

	if psource[1] not in COMMOFF.keys():
		commoff_load(psource[1])

	lanswer = u''
	llistoff, llistare, llistnot, llisttaby = [], [], [], []

	lcommands  = COMMANDS.keys()
	lcommands += MACROS.gmacrolist.keys()
	if MACROS.macrolist.has_key(psource[1]):
		lcommands += MACROS.macrolist[psource[1]].keys()

	for lcommand in lparam:
		if lcommand in lcommands and lcommand not in COMMOFF_TABU:
			if lcommand not in COMMOFF[psource[1]]:
				llistoff.append(lcommand)
				COMMOFF[psource[1]].append(lcommand)
			else:
				llistare.append(lcommand)
		elif lcommand in lcommands and lcommand in COMMOFF_TABU:
			llisttaby.append(lcommand)
		else:
			llistnot.append(lcommand)

	if len(llistoff) > 0:
		lanswer += u'\nДля этой конфы были отключены следующие команды:\n' + u', '.join(sorted(llistoff))
	if len(llistare) > 0:
		lanswer += u'\nСледующие команды не были отключены, поскольку они уже отключены:\n' + u', '.join(sorted(llistare))
	if len(llistnot) > 0:
		lanswer += u'\nПеречисленные ниже команды вообще не команды:\n' + u', '.join(sorted(llistnot))
	if len(llistnot) > 0:
		lanswer += u'\nСледующие команды отключать вообще нельзя:\n' + u', '.join(sorted(llisttaby))

	GCHCFGS[psource[1]]['commoff'] = COMMOFF[psource[1]]
	DBPATH = 'dynamic/' + psource[1] + '/config.cfg'
	vika_check_file(DBPATH, u'{}' )
	write_file(DBPATH, str(GCHCFGS[psource[1]]))

	reply(ptype, psource, lanswer)

#---------------------------------------------------------------------------------------------------

def commoff_load ( pgch ):
	try:
		if GCHCFGS[pgch].has_key('commoff'):
			COMMOFF[pgch] = GCHCFGS[pgch]['commoff']
		else:
			COMMOFF[pgch] = []
	except:
		pass

#---------------------------------------------------------------------------------------------------

register_stage1_init(commoff_load)

register_command_handler(commoff_on, 'включить', ['админ', 'мук', 'все'], 20, 'Включает определённые команды для текущей конференции из отключённых. Если необходимо включить несколько команд, то их надо указывать через пробел.', 'включить <список команд>', ['включить тык диско версия пинг'])

register_command_handler(commoff_off, 'отключить', ['админ', 'мук', 'все'], 20, 'Отключает определённые команды для текущей конференции. Если необходимо отключить несколько команд, то их надо указывать через пробел.', 'отключить [список команд]', ['отключить тык диско версия пинг'])

#---------------------------------------------------------------------------------------------------
